# -*- coding:utf-8 -*-
"""
DEMO
====

项目的程序脚本，用于测试、演示各种交通需求预测方法的实现。
这些实现保存在文件 `traffic_distribution_predict.py`
中。

author: BOXonline1396529
create：2023-03-27
update：2019-03-31
"""

# In[ ]:
# 导入必要的库
# 外部的库只有 `numpy` 是需要的

import numpy as np

# In[ ]:
# 自己定义的库
from traffic_distribution_predict.coefficient_model import *

# In[ ]:
# 设置收敛的判断标准

alpha = 0.03

# In[ ]:
# 导入OD矩阵

X = np.array(
    [
        [17,  7,  4],
        [ 7, 38,  6],
        [ 4,  5, 17]
        ]
    )

# In[ ]:
# 未来年交通需求的吸引量和产生量

U = np.array([38.6, 91.9, 36.0])
V = np.array([39.3, 90.3, 36.9])

# In[ ]:

frator(X, U, V, alpha=alpha)

# In[ ]:
from traffic_distribution_predict.gravity_model import *

# In[ ]:
# 导入出行时间矩阵 C
# 
# 由于重力模型计算需要导入小区和小区之间的距离矩阵，
# 因此我们在这里定义现状行驶时间矩阵 `C`
# 用出行时间来量化距离

C = np.array(
    [
        [ 7, 17, 22],
        [17, 15, 23],
        [22, 23,  7]
        ]
    )

# In[ ]:
gravity_model = unconstrained_gravity_model(X, C)
gravity_model.fit()

# In[ ]:
# 利用 `gravity_model` 进行交通分布预测
# 
# 进行预测之前需要先导入 `fC` 为将来行驶时间
fC = np.array(
    [
        [ 4,  9, 11],
        [ 9,  8, 12],
        [11, 12,  4]
        ]
    )

# In[ ]:
# 调用 `.predict` 方法进行预测
gravity_model.predict(U, V, fC)